home *** CD-ROM | disk | FTP | other *** search
- unit DrBobNEW;
- {$DEFINE DEBUG}
- interface
- uses
- Classes, ScktComp;
-
- type
- TBNNTP = class(TComponent)
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- public
- procedure Connect;
- protected
- _Socket: TClientSocket;
- procedure SocketRead(Sender: TObject; Socket: TCustomWinSocket);
- procedure SocketWrite(Sender: TObject; Socket: TCustomWinSocket);
- private
- fNewsServer: String;
- published
- property NewsServer: String read fNewsServer write fNewsServer;
- private
- LastSocket: TCustomWinSocket;
- Status: String;
- end;
-
- implementation
- uses
- SysUtils, Forms;
-
- const
- CmdStart = 0;
- CmdList = 1;
- CmdQuit = 42;
-
- const
- NNTP = 119;
-
- const
- CRLF = #13#10;
-
- var
- Command: Integer = CmdStart;
-
- constructor TBNNTP.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- _Socket := TClientSocket.Create(Self);
- _Socket.Port := NNTP;
- _Socket.OnRead := SocketRead;
- _Socket.OnWrite := SocketWrite;
- LastSocket := nil
- end {Create};
-
- destructor TBNNTP.Destroy;
- begin
- _Socket.OnRead := nil;
- if Assigned(LastSocket) then LastSocket.SendText('QUIT'+ CRLF);
- _Socket.Free;
- _Socket := nil;
- inherited Destroy
- end {Destroy};
-
- procedure TBNNTP.Connect;
- begin
- Command := CmdStart;
- _Socket.Active := False;
- _Socket.Host := fNewsServer;
- _Socket.Open;
- repeat
- Application.ProcessMessages
- until Command >= CmdQuit;
- end {Connect};
-
- procedure TBNNTP.SocketRead(Sender: TObject; Socket: TCustomWinSocket);
- begin
- LastSocket := Socket; { talk back? }
- Status := Socket.ReceiveText;
- while (Length(Status) > 0) and (Status[Length(Status)] in [#10,#13]) do
- Delete(Status,Length(Status),1);
- {$IFDEF DEBUG}
- writeln(Status);
- {$ENDIF}
- case Command of
- CmdStart: Command := CmdList;
- CmdList: Command := CmdQuit
- end;
- SocketWrite(Sender, Socket)
- end {SocketRead};
-
- procedure TBNNTP.SocketWrite(Sender: TObject; Socket: TCustomWinSocket);
- var
- Send: String;
- begin
- Send := '';
- case Command of
- CmdList: Send := 'LIST';
- CmdQuit: Send := 'QUIT'
- end;
- {$IFDEF DEBUG}
- if Send <> '' then writeln(Command,'> ',Send);
- {$ENDIF}
- Socket.SendText(Send + CRLF)
- end {SocketWrite};
-
- end.
-
-